home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / shell / vl / src / vl.c < prev    next >
Text File  |  1995-08-15  |  4KB  |  196 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <egb.h>
  9. #include <guidbg.h>
  10.  
  11. #include <kh.h>
  12.  
  13. char    *guiEgbPtr ;            /*    EGB のワークアドレス    */
  14.  
  15. int    iconDialogID = -1 ;
  16. int    dummyDButtonID = -1 ;
  17. int    iconQuitIconID = -1 ;
  18. int    barIconID = -1 ;
  19. int    minIconID = -1 ;
  20. int    maxIconID = -1 ;
  21.  
  22. //#define DEBUG
  23.  
  24. unsigned char beforeLevel = 1 ;
  25. unsigned char nowLevel = 0 ;
  26.  
  27. int quitFuncRet = ILLEGAL_FUNCTION ;
  28.  
  29. int userFunc(apliId, messId, info, data)
  30. int    apliId;
  31. int    messId;
  32. int    info;
  33. int    data;
  34. {
  35.     register int    ret;
  36.  
  37.     ret = ILLEGAL_FUNCTION;
  38.  
  39.     switch(messId)
  40.     {
  41.         case    GM_QUIT :
  42.             MMI_SendMessage(iconQuitIconID,MM_EXEC,2,0,0);
  43.             ret = quitFuncRet ;
  44.             break;
  45.     }
  46.  
  47.     return(ret);
  48. }
  49.  
  50. void main(int argc,char *argv[])
  51. {
  52.     int x=276;
  53.     int y=225;
  54.  
  55.     if(argc>1)
  56.     {
  57.         x = ((argv[1])[0])*1000 + ((argv[1])[1])*100
  58.                     + ((argv[1])[2])*10 + (argv[1])[3] - ('0'*1111);
  59.         if(argc>2)
  60.             y = ((argv[2])[0])*1000 + ((argv[2])[1])*100
  61.                         + ((argv[2])[2])*10 + (argv[2])[3] - ('0'*1111);
  62.     }
  63.     #ifdef DEBUG
  64.     printf("(%d,%d)\n",x,y);
  65.     #endif
  66.  
  67.     static MMICTRL mmi ={
  68.                 SCREEN16|SCREENIGNORE,        // ページ0側解像度
  69.                 SCREENUNUSED,                // ページ1側解像度
  70.                 0,                             // 書き込みページ
  71.                 SCREENAVAILABLE,             // 表示ページ
  72.                 0,                             // 表示プライオリティ
  73.                 SCREENAVAILABLE,            // 色数
  74.                 SCREENEXPAND,                 // VRAMの横の長さ
  75.                 0,                             // メモリ領域の大きさ
  76.                 NULL,                         // メモリ領域のアドレス
  77.                 0,                             // ユーザ領域の大きさ
  78.                 NULL,                         // ユーザ領域のアドレス
  79.                 0, 0,                         // 画面枠    lupx,lupy
  80.                 0, 0,                        //            rdwx,rdwy
  81.                 -16384, -16384,                // 移動枠    lupx,lupy
  82.                 16383, 16383,                //            rdwx,rdwy
  83.                 15,                         // 白色
  84.                 8,                          // 黒色
  85.                 7,                          // 灰色
  86.                 6                             // 反転色
  87.     };
  88.  
  89.     extern int APL_init() ;
  90.  
  91.     /*    初期化処理    */
  92.     if (MMI_Open( &mmi ) == NOERR)
  93.     {
  94.         /*    初期化に成功すればメインループに入る.    */
  95.         if (APL_init(x,y) == NOERR)
  96.             MMI_ExecSystem() ;
  97.     }
  98.  
  99.     /*    終了処理    */
  100.     MMI_Close() ;
  101.  
  102. }
  103.  
  104. int APL_init(int sx,int sy)
  105. {
  106.     extern MMIINIT    initDataGUI ;
  107.  
  108.     register int    ret ;
  109.  
  110.     /*    EGB ワークアドレスの取得.    */
  111.     guiEgbPtr = MMI_GetEgbPtr() ;
  112.  
  113.     /*    ユーザアイコン設定        */
  114.     extern unsigned char *iconTbl[];
  115.     extern int iconMaxId;
  116.     MMI_SetIconTable(iconTbl, iconMaxId);
  117.  
  118.     /*    ハイパ型部品の初期化            */
  119.     if ((ret = MMI_initHyper()) < 0)
  120.         return ret ;
  121.     /*    ダイアログ型部品の初期化        */
  122.     if ((ret = MMI_initDialogL40()) < 0)
  123.         return ret ;
  124.     /*    ボタン型部品の初期化            */
  125.     if ((ret = MMI_initButtonL40()) < 0)
  126.         return ret ;
  127.     /*    ドロウボタン型部品の初期化        */
  128.     if ((ret = MMI_initDrawButtonL40()) < 0)
  129.         return ret ;
  130.     /*    アイコンボタン型部品の初期化    */
  131.     if ((ret = MMI_initIconL40()) < 0)
  132.         return ret ;
  133.  
  134.     /*    背景データの初期化                        */
  135.  
  136.     /*    データの登録        */
  137.     if ((ret = MMI_Init(&initDataGUI)) < 0)
  138.         return ret ;
  139.  
  140.     //    Tmenuにパレットを合わせる
  141.     KH_initGuiColor();
  142.  
  143.     //    初期位置に移動
  144.     HYPER hyp;
  145.     FRAME fr;
  146.     MMI_SendMessage(iconDialogID,MM_GETHYPER,1,&hyp);
  147.     fr.lupx = sx ;
  148.     fr.lupy = sy ;
  149.     fr.rdwx = sx + (hyp.fr.rdwx-hyp.fr.lupx) ;
  150.     fr.rdwy = sy + (hyp.fr.rdwy-hyp.fr.lupy) ;
  151.     MMI_SendMessage(iconDialogID,MM_MOVE,1,&fr);
  152.  
  153.     /*    背景を表示する                            */
  154.     MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
  155.  
  156.     MMI_SendMessage(MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc);
  157.     MMI_CallMessage(MMI_GetApliId(), GM_TITLE, (int)"vl                              By 機拡", 0);
  158.  
  159.     extern void    userIdleTask();
  160.     MMI_SetIdleTaskFunc( userIdleTask );
  161.     _outb(0x04e8,0x00);    //ADSD FIFO flash
  162.     userIdleTask();
  163.  
  164.     return NOERR ;
  165. }
  166.  
  167. void userIdleTask(void)
  168. {
  169.  
  170.     nowLevel = (_inb(0x04e7) & 0x7f)>>3;
  171.  
  172.     if(nowLevel==beforeLevel) return ;
  173.     if(nowLevel<beforeLevel) beforeLevel-- ;
  174.         else beforeLevel = nowLevel ;
  175.  
  176.     MMI_SendMessage(barIconID,MM_SETSHAPE,1,513+beforeLevel);
  177.     MMI_SendMessage(barIconID,MM_SHOW,0);
  178.  
  179.     return ;
  180. }
  181.  
  182. /*    initDataGUI:iconQuitIconID:MJ_ICONL40の呼び出し関数    */
  183. int    iconQuitFunc(kobj, messId, argc, pev, trigger)
  184. int        kobj ;
  185. int        messId ;
  186. int        argc ;
  187. EVENT    *pev ;
  188. int        trigger ;
  189. {
  190.     MMI_SetHaltFlag(TRUE);
  191.     quitFuncRet = NOERR ;
  192.  
  193.     return NOERR ;
  194. }
  195.  
  196.